minigui输入法汉字的获取

您所在的位置:网站首页 gptcache 输入中文返回结果一样 minigui输入法汉字的获取

minigui输入法汉字的获取

2024-07-14 12:20:16| 来源: 网络整理| 查看: 265

minigui的中文输入法是内嵌在mgi库中的,现在把它剥离出来,从而实现自定义的定制。

1. 前言

经过各种调试,现在能实现的功能:输入拼音字母,返回中文候选字/候选词,而点击候选字显示联想字应该也是一样道理,尚未调试。

这里共用到了3个文件:ime_pinyin.c, ime_pinyin.h, ime_tab_pinyin.h

其中ime_tab_pinyin.h是词库,即你输入拼音,然后返回对应的汉字/词,举例:输入ni, 会出现 你 尼 拟 妮 泥 倪 …

词库文件的制作可以参看大神的文章:minigui词库更新

2. 下面说一下主要函数:

下面说一下主要函数: 说明: 所有的函数中使用的字符串长度最大值是32

#define SW_STR_LEN 32

A. 拼音转汉字函数

int pinyin_translate_word(void *method, const char *strokes, char *buffer, int buffer_len, int index)

函数说明:该函数输入一个字符串,会返回候选汉字。 参数说明: method: 这里没有用,传NULL就行;

strokes: 输入的字符串,比如ni

buffer: 返回的字/ 词语(注意:这里返回的汉字是gb2312格式)

buffer_len: 这里不太明白具体含义,不过一般传入32,传入32时返回的汉字个数是10,如果改大了,那么就会返回大于10个汉字。

index: 从词库匹配的第几个汉字开始返回,举例输入ni,那么词库中ni的前20个汉字是:你 泥 尼 呢 逆 拟 尿 妮 霓 倪 匿 腻 溺 伲 坭 猊 怩 昵 旎 祢,此时index传入0的话,会返回前10个汉字,传入2的话,会返回第2-12个汉字。

返回值:本次返回汉字中最后一个汉字在整个匹配汉字中的索引。举例:buffer_len 输入32,index输入0的时候,返回值是10,index是5的时候,返回值是15.

备注:返回的汉字有时候有不对的情况,比如上面输入ni 结果返回的汉字中有个"尿"字…,这是因为词库不准确导致的。另外输入nihao,不会返回你好,是因为词库中没有nihao这个字符串, 所以维护词库也是个重要的事情。

B. 汉字联想函数

int pinyin_predict_pord(void *method, const char *lookfor, char * buffer, int buffer_len, int index);

函数说明:该函数输入一个汉字,会返回该汉字的联想汉字。比如输入你,会返回:“好”,“的”,“们”,“在”,“是” 等可以和"你"组词的汉字 参数说明:和上面函数类似(目前尚未测试该函数) 返回值:未测试 备注: 未测试

C. 字符串拼接函数

void append(char* str, char c, int len, int flag)

函数说明:该函数将输入的单个字符拼接成字符串。 备注:len一般传入 SW_STR_LEN - 2, flag 这里用不到

D. 字符串转小写函数

void strcpylower(char* buf, const char* str)

函数说明:函数A拼音转汉字函数要求输入的字符串是小写,因此需要先用该函数转一下,再调用函数A

3. 调用流程

1) 定义字符串

定义一个输入字符串:

char in_str[SW_STR_LEN],

一个输入转换字符串:

char in_str_tmp[SW_STR_LEN]

和一个输出字符串:

char out_str[SW_STR_LEN].

2) 将输入的单个英语字符全部大写:

char ch = toupper('n'); char ch1 = toupper('i');

3) 使用append函数将步骤2中的字符拼接到字符串中:

append(in_str_tmp, ch, SW_STR_LEN - 2, 2); append(in_str_tmp, ch1, SW_STR_LEN - 2, 2);

4) 使用strcpylower将步骤3中的字符串全部转化为小写:

strcpylower(in_str, in_str_tmp);

5) 调用 pinyin_translate_word函数得到候选字:

pinyin_translate_word(NULL, in_str, out_str, SW_STR_LEN, 0);

说明:

由上面步骤可以看出其实如果能保证输入的都是小写的话,只用步骤3即可。上面得到的out_str是候选汉字的字符串数组,是gb2312格式的,有的情况下可能需要转成utf8格式才能正常显示,转换函数如下,其中buffer是转换之后的字符串,characters是步骤5中的out_str,length是out_str的长度,encode是编码方式,这里是”gb2312“ int convert2utf8(unsigned char *buffer, const unsigned char* characters, size_t mbs_length, char* encode) { int conved_mbs_len, ucs_len; char buffer2[1024]; PLOGFONT logfont = CreateLogFont (NULL, "arial", encode, FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 12, 0); assert(logfont); const unsigned char* source = characters; ucs_len = MBS2WCSEx (logfont, (void *)buffer2, FALSE, source, mbs_length, sizeof(buffer2), &conved_mbs_len); DestroyLogFont(logfont); logfont = CreateLogFont (NULL, "arial", "utf8", FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 12, 0); assert(logfont); ucs_len = WCS2MBSEx (logfont, (unsigned char *)buffer, (unsigned char *)buffer2, ucs_len, FALSE, sizeof(buffer2), &conved_mbs_len); DestroyLogFont(logfont); return ucs_len; }


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭